<script setup lang="ts">
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
import "@/static/font/iconfont.css"; // 引入图标字体
import "@/static/renshifont/iconfont.css"; // 引入图标字体
import useLoginApi from "./pages/login/api/login";
import { ensureUserInfoStructure } from "./utils/authFunction";

// 统一的登录成功处理函数
const handleLoginSuccess = async (token: string, expiresIn: number) => {
  // 1. 先存储token
  uni.setStorageSync("token", token);
  uni.setStorageSync(
    "tokenExpireTime",
    Date.now() + (expiresIn || 3600) * 1000,
  );

  // 2. 立即获取用户信息
  try {
    const userInfoRes = await useLoginApi().getUserInfo();

    // 使用工具函数确保用户信息结构完整
    const safeUserInfo = ensureUserInfoStructure(userInfoRes);

    // 保存用户信息到本地存储
    uni.setStorageSync("userInfo", safeUserInfo);
    console.log("App启动时用户信息已保存:", safeUserInfo);
  } catch (error) {
    console.error("App启动时获取用户信息异常:", error);
    // 即使获取用户信息失败，也不影响登录流程
  }

  // 3. 跳转到工作台
  uni.switchTab({
	  
    url: "/pages/work/work",
  });
};

// 检查是否已登录
const checkLoginStatus = async () => {
  // 检查是否为微信小程序环境
  // #ifdef MP-WEIXIN
  console.log("微信小程序环境，直接进入工作台");
  try {
    const loginRes = await uni.login({
      provider: "weixin",
    });
    const res = await useLoginApi().wechatMiniProgramLogin({
      Code: loginRes.code,
    });

    if (res.Code === 200) {
      // 登录成功，使用统一的登录成功处理函数
      await handleLoginSuccess(res.Data.access_token, res.Data.expires_in);
    } else if (res.Code === 201) {
      // 微信未绑定，保存微信Key并跳转到登录方式选择页面
      const wechatKey =
        res.Data?.WechatBindKey ||
        res.Data?.wechatKey ||
        res.Data?.WechatKey ||
        `wechat_${Date.now()}`;

      uni.setStorageSync("tempWechatKey", wechatKey);
      console.log("App.vue保存WechatKey:", wechatKey);

      uni.redirectTo({
        url: `/pages/login/select?wechatKey=${encodeURIComponent(wechatKey)}`,
      });
    } else {
      console.error("微信小程序登录失败:", res);
      // 登录失败，跳转到选择登录方式页面
      uni.redirectTo({
        url: "/pages/login/select",
      });
    }
  } catch (error) {
    console.error("微信小程序登录异常:", error);
    // 登录异常，跳转到选择登录方式页面
    uni.redirectTo({
      url: "/pages/login/select",
    });
  }
  return true;
  // #endif

  // 其他平台继续原有的登录检查逻辑
  const token = uni.getStorageSync("token");
  const expireTime = uni.getStorageSync("tokenExpireTime");

  // 如果有token且未过期，自动跳转到首页
  if (token && expireTime && expireTime > Date.now()) {
    console.log("检测到有效token，自动登录");

    // 检查是否有用户信息，如果没有则获取
    const userInfo = uni.getStorageSync("userInfo");
    if (!userInfo) {
      try {
        const userInfoRes = await useLoginApi().getUserInfo();

        // 使用工具函数确保用户信息结构完整
        const safeUserInfo = ensureUserInfoStructure(userInfoRes);

        uni.setStorageSync("userInfo", safeUserInfo);
        console.log("补充获取用户信息:", safeUserInfo);
      } catch (error) {
        console.error("补充获取用户信息失败:", error);
      }
    }

    uni.switchTab({
      url: "/pages/work/work",
    });

    return true;
  } else {
    console.log("未检测到有效token，跳转到登录页");
    // #ifdef MP-WEIXIN
    uni.redirectTo({
      url: "/pages/login/select",
    });
    // #endif
    // #ifndef MP-WEIXIN
    uni.redirectTo({
      url: "/pages/login/login",
    });
    // #endif
  }

  // 如果token已过期，清除存储的信息
  if (token && (!expireTime || expireTime <= Date.now())) {
    console.log("Token已过期，清除登录信息");
    uni.removeStorageSync("token");
    uni.removeStorageSync("tokenExpireTime");
    uni.removeStorageSync("userInfo"); // 同时清除用户信息
    // #ifdef MP-WEIXIN
    uni.redirectTo({
      url: "/pages/login/select",
    });
    // #endif
    // #ifndef MP-WEIXIN
    uni.redirectTo({
      url: "/pages/login/login",
    });
    // #endif
  }

  return false;
};

// 小程序强制更新功能
const checkForUpdate = () => {
  const updateManager = uni.getUpdateManager();

  updateManager.onCheckForUpdate(function (res) {
    // 请求完新版本信息的回调
    console.log(res.hasUpdate, "请求完新版本信息的回调");
  });

  updateManager.onUpdateReady(function (res) {
    uni.showModal({
      title: "更新提示",
      content: "新版本已经准备好，是否重启应用？",
      showCancel: false,
      success(res) {
        if (res.confirm) {
          // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
          updateManager.applyUpdate();
        }
      },
    });
  });

  updateManager.onUpdateFailed(function (res) {
    // 新的版本下载失败
    console.log("小程序版本下载失败", res);
    uni.showModal({
      title: "提示",
      content: "新版小程序下载失败\n请自行退出程序，手动卸载本程序，再运行",
      confirmText: "知道了",
    });
  });
};

onLaunch(() => {
  console.log("App Launch");
  // 检查小程序更新
  checkLoginStatus();
});

onShow(async () => {
  checkForUpdate();
});

onHide(() => {
  console.log("App Hide");
});
</script>

<style lang="scss">
@import "./styles/common.scss";

/* 精确禁止弹性效果，保持正常滚动 */
page {
  /* 禁止过度滚动的弹性效果，但保持正常滚动 */
  overscroll-behavior: none;
  -webkit-overflow-scrolling: touch;
}

/* 针对不同平台的处理 */
/* #ifdef MP-WEIXIN */
page {
  /* 微信小程序正常滚动，但禁止弹性 */
  overscroll-behavior: none;
  -webkit-overflow-scrolling: touch;
}
/* #endif */

/* #ifdef APP-PLUS */
/* App端保持正常滚动 */
.uni-page-body {
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: none;
}
/* #endif */

/* #ifdef H5 */
html,
body {
  /* H5端禁止弹性但保持滚动 */
  overscroll-behavior: none;
  -webkit-overflow-scrolling: touch;
}
/* #endif */

/* 针对scroll-view组件 */
scroll-view {
  /* 保持正常滚动，只禁止边界弹性 */
  overscroll-behavior: none;
  -webkit-overflow-scrolling: touch;
}
</style>
